去年底因為想學習資料庫原理和 Rust 這門語言而接觸 Apache DataFusion ,到現在陸陸續續也有了些小小的貢獻,不過始終對該專案還是懵懂無知,因此便萌生參賽的想法,希望可以在逼迫自己寫文章的同時更深入了解 DataFusion 的全貌。
在介紹 DataFusion 之前,讓我們先聊聊什麼是查詢引擎(Query Engine)吧。本質上查詢引擎是一個資料處理的管道,可以將使用者對資料提出的問題轉換成機器看得懂的處理流程,最後返回使用者想知道的資料答案。舉例來說,想像你有一個包含數百萬筆訂單資料的檔案,當你你想知道「上個月來自台北的訂單總金額是多少?」查詢引擎就負責將上述問題拆解並轉換成以下步驟:
以往查詢引擎大多是傳統資料庫系統的一部分,但隨著 Data Lakehouse 架構和 AI/ML 的興起,資料格式和處理的靈活性也日益受到重視。因此查詢引擎的元件化也讓現代企業可以像樂高一樣自由的組合適合的儲存格式、查詢引擎和儲存來源等。
對查詢引擎有了基礎的認識後,接著就進入本篇文章的重點 — Apache Datafusion。2017 由創始人 Andy Grove 開始的個人專案,2019 年捐贈給 Apache Arrow,並在2024年正式成為 Apache 的獨立專案。
作為一個高效可擴展的查詢引擎,DataFusion 有以下幾個核心特性:
有鑑於 Andy Grove 的願景:
Without DataFusion, highly performant vectorized query engines would remain the domain of a few large companies and world-class research institutions. With DataFusion, we can all build on top of a shared foundation, and focus on what makes our projects unique
希望高效能的查詢引擎不再是大公司壟斷的技術,一般中小企業、新創公司的開發者也能使用 DataFusion 打造符合自己特色的資料庫、查詢系統或 ETL 。
目前已有多個開源專案基於 DataFusion:
DataFusion Python 也提供完整的 Python 支援:
接下來的 29 天,我們將循序漸進地學習:
第 1 週 - 基礎入門
第 2 週 - 架構深入
第 3 週 - 進階開發
第 4-5 週 - 實戰應用
呼~終於趕工完成了關於 DataFusion 的基礎介紹,明天我們將深入探討 DataFusion 的心臟 Apache Arrow